package com.yuncheng.spcyApi.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuncheng.spcyApi.dto.SqsxShjPrintDataDto;
import com.yuncheng.spcyApi.dto.sqsx.SqsxClscmsDto;
import com.yuncheng.spcyApi.dto.sqsx.SqsxQueryStatDto;
import com.yuncheng.spcyApi.entity.SpcySqsxBasic;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuncheng.spcyApi.vo.common.OrderItemVo;
import com.yuncheng.spcyApi.vo.hbjc.BhbSqsxJbxxVo;
import com.yuncheng.spcyApi.vo.hbjc.HbSqsxSyncXxVo;
import com.yuncheng.spcyApi.vo.hbjc.HbsxidVo;
import com.yuncheng.spcyApi.vo.spcy.SqsxShjPrintDataVo;
import com.yuncheng.spcyApi.vo.sqsx.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Description: 审评查验-申请事项基本信息
 * @Author: csx
 * @Date: 2023-03-03
 * @Version: V1.0
 */
public interface SpcySqsxBaiscMapper extends BaseMapper<SpcySqsxBasic> {
    Page<SpcySqsxBasic> selectNoInitSqsxBaisc(Page<SpcySqsxBasic> page, @Param("sqsx") SpcySqsxBasic sqsx, @Param("isSelectNotInit") boolean isSelectNotInit);

    Page<XcjcArrangeVo> selectXcjcArrangePageList(Page<XcjcArrangeVo> page, @Param("bean") XcjcArrangeVo arrangeVo);

    List<XcjcArrangeVo> selectXcjcArrangeList(@Param("bean") XcjcArrangeVo arrangeVo);

    /**
     * 申请事项-分页查询
     * @param page
     * @param sqsx
     * @param sflcbj 是否流程办结 (不等于在办)
     * @return
     */
    Page<SpcySqsxBasic> selectSqsxPageList(Page<SpcySqsxBasic> page,
                                           @Param("sqsx") SpcySqsxBasic sqsx,
                                           @Param("orderBean") OrderItemVo orderItemVo,
                                           @Param("gjz") String gjz,
                                           @Param("sflcbj") String sflcbj,
                                           @Param("slkssj") String slkssj,
                                           @Param("sljssj") String sljssj);

    /**
     * 申请事项查询-通过id
     * @return
     */
    SpcySqsxBasic selectSqsxById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项详情查询-通过id
     * @return
     */
    SpcySqsxBasic selectSqsxInfoById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项详情查询-通过id
     * @return
     */
    SpcySqsxBasic selectSqsxXcjcById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项编码查询-通过id
     */
    SpcySqsxBasic selectSqsxYwflCodeById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项编码和行政审批状态查询-通过id
     */
    SpcySqsxBasic selectCodeFxzspztAndById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项查询业务信息-通过id
     * @param sqsxid
     * @return
     */
    SpcySqsxBasic selectSqsxYwxxById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项查询事项信息-通过id
     * @param sqsxid
     * @return
     */
    SpcySqsxBasic selectSqsxSxxxById(@Param("sqsxid") String sqsxid);

    /**
     * 获取汇总检查计划事项列表
     * @param fybmzt
     * @return
     */
    List<SpcySqsxBasic> getHzjcjhSqsxList(String fybmzt);

    /**
     * 查询当前申请事项下-同一个企业所在相同环节的事项列表
     */
    List<BhbSqsxJbxxVo> selectXtqyIndexHjSxListBySqsxId(@Param("sqsxid") String sqsxid, @Param("fhjmc") String fhjmc);

    /**
     * 查询当前申请事项下-同一个企业所在相同环节的事项列表-近期事项
     */
    List<BhbSqsxJbxxVo> selectQyJtHjSxListBySqsxId(@Param("sqsxid") String sqsxid, @Param("fhjmcs") List<String> fhjmcs);

    /** 查询事项业务分类编码 */
    String selectFywflcodeById(@Param("sqsxid") String sqsxid);

    /** 查询事项合并检查状态 */
    Integer selectFhbsxztById(@Param("sqsxid") String sqsxid);

    /** 查询事项的被合并事项id */
    String selectFhbsxidsById(@Param("sqsxid") String sqsxid);

    /**
     * 查询当前事项业务编码和合并事项id
     */
    HbsxidVo selectHbsxidAndCodeById(@Param("sqsxid") String sqsxid);

    /** 查询事项名称列表 */
    List<String> selectFsxmcListByIds(@Param("ids") List<String> ids);

    /** 查询被合并申请事项列表-根据合并事项id */
    List<BhbSqsxJbxxVo> selectBhbsqsxListByFhbsxid(@Param("hbsxid") String hbsxid);

    /** 查询被合并申请事项列表-根据事项ids */
    List<BhbSqsxJbxxVo> selectBhbsqsxListByIds(@Param("ids") List<String> ids);

    /** 查询被合并申请事项列表-根据合并事项id和需要排除的事项ids
     * @param ids 排除事项ids
     *  */
    List<BhbSqsxJbxxVo> selectBhbsxListByIdsAndFhbsxid(@Param("ids") List<String> ids, @Param("hbsxid") String hbsxid);

    /** 查询被合并申请事项详情列表-根据合并事项id */
    List<BhbSqsxJbxxVo> selectBhbsxXqListByIds(@Param("hbsxid") String hbsxid);

    /** 查询被合并申请事项列表-根据合并事项id */
    List<SpcySqsxBasic> selectBhbsqsxListByHbsxid(@Param("hbsxid") String hbsxid);

    /** 查询合并申请事项-需要同步的信息 */
    HbSqsxSyncXxVo selectHbSqsxSyncInfoById(@Param("sqsxid") String sqsxid);

    /**
     * 查询申请事项-组长/组员/预备检查员
     * */
    SqsxZzZyYbNumVo selectZzZyYbNumBySqsxId(@Param("sqsxid") String sqsxid);

    /**
     * 查询申请事项-主办人id
     */
    SqsxZbrVo selectFzbrById(@Param("sqsxid") String sqsxid);

    /**
     * 查询申请事项-主办人id
     */
    List<SqsxHbsxZbrVo> selectFzbrListByIds(@Param("ids") List<String> ids);

    /**
     * 查询申请事项-主办人id
     */
    SqsxHbsxZbrVo selectFzbrVoById(@Param("id") String id);

    /**
     * 查询多个事项的主办人ids
     */
    List<String> selectFzbrIdsListByIds(@Param("ids") List<String> ids);

    /**
     * 查询事项id-根据事项id和主办人id
     */
    List<String> selectSxByIdAndFzbr(@Param("sqsxid") String sqsxid, @Param("fzbr") String fzbr);

    /**
     * 查询申请事项-企业id
     */
    String selectFqyidById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项-主办人置空
     * */
    void updateEmptyFzbrById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项-时限相关
     */
    SqsxSysxVo selectSxsxById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项-综合评定审核件打印数据
     */
    SqsxShjPrintDataDto selectSqsxShjPrintById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项-流程使用基本信息
     */
    SqsxFlowResVo selectSqsxFlowJbxxById(@Param("sqsxid") String sqsxid);

    /**
     * 申请事项-查询材料审查模式和事项审批状态
     * */
    SqsxClscmsDto selectFclscmcById(@Param("sqsxid") String sqsxid);

    /** 获取申请事项-检查情况转述 */
    String selectJcqkzsById(@Param("sqsxid") String sqsxid);

    /** 查询当前企业的上一次申请事项 */
    List<String> selectSycSqQyById(@Param("sqsxid") String sqsxid);

    /** 20240920 查询统计： */
    Page<SqsxQueryStatDto> selectQueryStatSqsxPage(Page<SqsxQueryStatDto> page, @Param("bean") SqsxQueryStatDto bean);

    List<SqsxQueryStatDto> selectQueryStatSqsxList(@Param("bean") SqsxQueryStatDto bean);

    /**
     * 多维度统计
     * @param selectSql 查询sql
     * @param groupBy 分组sql
     * @param fuserid 用户id
     * */
    List<Map> selectDwdStatGroup(@Param("selectSql") String selectSql,
                                 @Param("groupBy") String groupBy,
                                 @Param("fuserid") String fuserid
    );
}
